home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / INOUT.D < prev    next >
Encoding:
Modula Definition  |  1990-12-11  |  5.7 KB  |  170 lines

  1. DEFINITION MODULE InOut;
  2.  
  3. FROM SYSTEM IMPORT WORD, LONGWORD;
  4.  
  5. CONST EOL = 15C;
  6.        (*
  7.         * end-of-line character (= 13 dezimal).
  8.         * Dieser Wert wird geliefert (von 'Read' bzw. durch 'termCH'),
  9.         * wenn ein Zeilenendezeichen gelesen wurde. (Dies kann die
  10.         * Kombination aus CR und LF oder ein einzelnes LF sein).
  11.         * Wird dieses Zeichen bei 'Write' ausgegeben, wirkt dies wie
  12.         * ein WriteLn-Aufruf.
  13.         *)
  14.  
  15. VAR  Done: BOOLEAN;
  16.        (*
  17.         * Wurde die Ein- oder Ausgabe umgeleitet (mit Redirect...
  18.         * oder OpenIn-/Output), zeigt dieser Wert an, ob die
  19.         * letzte Operation noch erfolgreich auf der Datei
  20.         * ausgeführt werden konnte. Ist der Wert FALSE, ist entweder
  21.         * die Datei nicht zu öffnen (nach OpenIn-/Output bzw.
  22.         * Redirect...), die Datei beim Lesen zu Ende oder es
  23.         * wurde einfach eine ungültige Eingabe getätigt (z.B.
  24.         * durch falsche Eingabe bei 'ReadCard').
  25.         *)
  26.  
  27.      termCH: CHAR;
  28.        (*
  29.         * Enthält das Trennzeichen, mit dem die Eingabe bei
  30.         * 'ReadString', 'ReadToken' oder 'ReadLine' sowie den
  31.         * Zahlen-Eingabefunktionen beendet wurde.
  32.         *)
  33.  
  34.  
  35. PROCEDURE OpenInput ( REF defExt: ARRAY OF CHAR );
  36.   (*
  37.    * Der Anwender wird nach einem Dateinamen für die Eingabe gefragt.
  38.    * Gibt er keine Endung an, wird 'defExt' verwendet.
  39.    *)
  40.  
  41. PROCEDURE OpenOutput ( REF defExt: ARRAY OF CHAR );
  42.   (*
  43.    * Der Anwender wird nach einem Dateinamen für die Ausgabe gefragt.
  44.    * Gibt er keine Endung an, wird 'defExt' verwendet.
  45.    *
  46.    * Wenn die angegebene Datei schon existiert, wird sie überschrieben.
  47.    *)
  48.  
  49. PROCEDURE RedirectInput ( REF fileName: ARRAY OF CHAR );
  50.   (* Direkte Angabe der Eingabedatei *)
  51.  
  52. PROCEDURE RedirectOutput ( REF fileName: ARRAY OF CHAR; append: BOOLEAN );
  53.   (* Direkte Angabe der Ausgabedatei.
  54.    * Wenn die angegebene Datei schon existiert, wird sie, wenn 'append'
  55.    * FALSE ist, überschrieben, sonst werden die Daten an die bestehende
  56.    * Datei angefügt.
  57.    *)
  58.  
  59. PROCEDURE CloseInput;
  60.  
  61. PROCEDURE CloseOutput;
  62.  
  63.  
  64. PROCEDURE Read         (VAR c: CHAR);
  65.   (* Liest ein Zeichen *)
  66.  
  67. PROCEDURE ReadFromLine (VAR s: ARRAY OF CHAR);
  68.   (* Liest aus Zeile, bis String voll oder Zeilenende *)
  69.  
  70. PROCEDURE ReadToken    (VAR s: ARRAY OF CHAR);
  71.   (* Liest ein Wort *)
  72.  
  73. PROCEDURE ReadLn;
  74.   (* Verwirft alle Zeichen bis zum Zeilenende. *)
  75.  
  76. PROCEDURE EndOfLine (skip: BOOLEAN): BOOLEAN;
  77.   (* Liefert TRUE, wenn alle Zeichen bis zum Zeilenende gelesen sind
  78.    * (nur nach Read- und ReadToken-Aufrufen relevant).
  79.    * Ist 'skip' TRUE, werden ggf. alle Zeichen bis zum Zeilenende
  80.    * überlesen (wie beim Aufruf von 'ReadLn'
  81.    *)
  82.  
  83. PROCEDURE ReadString   (VAR s: ARRAY OF CHAR);
  84.   (*
  85.    * Liest je nach Konfiguration des InOut-Treibers
  86.    * eine ganze Zeile oder nur ein Wort.
  87.    * Wird beispielsweise GEMIO (Standard) oder TOSIO als Treiber
  88.    * verwendet, wird hierbei eine ganze Zeile gelesen (wie ReadFromLine).
  89.    *)
  90.  
  91. PROCEDURE ReadCard     (VAR c: CARDINAL);
  92. PROCEDURE ReadInt      (VAR i: INTEGER);
  93. PROCEDURE ReadLCard    (VAR c: LONGCARD);
  94. PROCEDURE ReadLInt     (VAR i: LONGINT);
  95.   (*
  96.    * Lesen dezimale Zahlen ein.
  97.    * Zur hexadezimalen Eingabe muß ein "$" am Anfang der
  98.    * Zahl stehen, binäre Werte werden mit "%" eingeleitet.
  99.    *)
  100.  
  101. PROCEDURE ReadNum      (VAR num: WORD;     base: CARDINAL);
  102. PROCEDURE ReadLNum     (VAR num: LONGWORD; base: CARDINAL);
  103.   (*
  104.    * Lesen vorzeichenlose Zahl zur Basis 'base' ein.
  105.    * Done ist FALSE, wenn die Eingabe ungültig war.
  106.    *)
  107.  
  108. PROCEDURE ReadReal     (VAR r: REAL);
  109. PROCEDURE ReadLReal    (VAR r: LONGREAL);
  110.  
  111.  
  112. PROCEDURE KeyPressed   (): BOOLEAN;    (* TRUE, wenn Taste gedrückt *)
  113. PROCEDURE BusyRead     (VAR c: CHAR);  (* 'ch'=0C, wenn keine Taste gedrückt *)
  114. PROCEDURE CondRead     (VAR c: CHAR; VAR valid: BOOLEAN);
  115.                                   (* 'valid'=FALSE, wenn kein Taste gedrückt *)
  116.  
  117. PROCEDURE FlushKbd;
  118.   (*
  119.    * Löscht alle Zeichen im Tastaturpuffer.
  120.    * Bei Eingabe von einer Datei geschieht nichts.
  121.    *)
  122.  
  123.  
  124. PROCEDURE GotoXY       (x, y: CARDINAL);
  125.  
  126. PROCEDURE Write        (c: CHAR);
  127. PROCEDURE WriteString  (REF s: ARRAY OF CHAR);
  128. PROCEDURE WriteLn;
  129. PROCEDURE WritePg;                     (* Löscht Bildschirm *)
  130.  
  131. PROCEDURE WriteCard    (c: LONGCARD; width: CARDINAL);
  132. PROCEDURE WriteInt     (i: LONGINT;  width: CARDINAL);
  133.  
  134. PROCEDURE WriteHex     (n: WORD;     width: CARDINAL);
  135. PROCEDURE WriteLHex    (n: LONGWORD; width: CARDINAL);
  136.   (*
  137.    * Die Zahl 'n' wird hexadezimal mit einem "$" und führenden
  138.    * Nullen ausgegeben. 'width' bestimmt die Mindestbreite
  139.    * einschließlich des "$"-Zeichens.
  140.    * Bsp:  WriteHex (18, 4)   ergibt   "$012"
  141.    *)
  142.  
  143. PROCEDURE WriteNum     (n: WORD;     base, width: CARDINAL; filler: CHAR);
  144. PROCEDURE WriteLNum    (n: LONGWORD; base, width: CARDINAL; filler: CHAR);
  145.   (*
  146.    * Die Zahl 'n' wird zur Basis 'base' asugegeben.
  147.    * 'width' bestimmt die Mindestbreite, ggf. wird mit 'filler'
  148.    * aufgefüllt.
  149.    * Bsp:  WriteNum (18, 16, 4, '0')   ergibt   "0012"
  150.    *       WriteNum (18, 16, 4, ' ')   ergibt   "  12"
  151.    *       WriteNum (18, 16, 0, ' ')   ergibt   "12"
  152.    *)
  153.  
  154. PROCEDURE WriteReal    (x: LONGREAL; width, sigFigs: CARDINAL);
  155.   (*
  156.    * Ausgabe des Real-Wertes. Je nach Wert (siehe FixToFloatMin/Max
  157.    * in MOSConfig) wird WriteFix oder WriteFloat aufgerufen (s.u.).
  158.    *)
  159.  
  160. PROCEDURE WriteFix     (x: LONGREAL; width, sigFigs: CARDINAL);
  161.   (* Festkomma-Darstellung des Real-Wertes *)
  162.  
  163. PROCEDURE WriteFloat   (x: LONGREAL; width, sigFigs: CARDINAL);
  164.   (* Fließkomma-Darstellung des Real-Wertes *)
  165.  
  166. PROCEDURE WriteEng     (x: LONGREAL; width, sigFigs: CARDINAL);
  167.   (* Ingenieur-Darstellung des Real-Wertes *)
  168.  
  169. END InOut.
  170.